package 贪心;

public class 贪心5_跳跃游戏 {
    public boolean canJump(int[] nums) {
        //1.每次跳跃后都会去判断是否cover了目标节点，因为我们的nums是装的最大的跳跃长度，所以基本上只要能cover到目标节点就必跳目标节点
        //- 如果是没cover到的话，就选cover尽可能靠后的，即i+nums[i]大的。
        //- 如果i+nums[i]直接cover到了，我们就直接返回true即可，
        //- 如果已经不能往后cover了，就返回false;
        if(nums.length==1)return true;

        int cover=0 ;//不能设为Integer.MIN_VALUE，因为cover是边界，默认最小应该是0

        for (int i = 0; i <= cover; i++) {//这个i不会回退的，只会往后走，所以我们可以不管begin
            //cover到
            if(cover>=nums.length-1)return true;
            //没cover到
            cover=Math.max(i+nums[i],cover);//如果cover能往后走，那么这个cover的边界就会不断扩大，如果cover不往后扩了，他就会结束，然后走最后的false;
        }
        return false;
    }

    public static void main(String[] args) {
        int[] nums={1,0,1,0};
        System.out.println(new 贪心5_跳跃游戏().canJump(nums));
    }
}
